/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package ig.metrica.ui.modelo.modelotablas;

import java.rmi.RemoteException;
import java.sql.SQLException;
import java.util.Collections;
import java.util.Hashtable;
import java.util.Iterator;

import ig.finanzas.DefinidorCalculoCambioEsperado;
import static ig.finanzas.Tasa.TIPO_CURVA;
import ig.finanzas.TasaPK;
import ig.finanzas.riesgo.FactorRiesgoPersonal;
import ig.metrica.origenesdedatos.OrigenDeDatosBean;
import ig.metrica.origenesdedatos.OrigenesdatosDTO;
import ig.metrica.ui.ServiceLocator;
import ig.metrica.ui.modelo.ExceptionEnConsulta;
import ig.metrica.ui.modelo.PantallaAsociacionFactorContrato;
import ig.metrica.ui.modelo.PantallaDefinicionCambioEsperadoFactores;
import ig.util.excepciones.DatoInvalidoExcepcion;
import java.util.Collection;
import java.util.ArrayList;

import javax.naming.NamingException;
import javax.swing.JOptionPane;
import javax.swing.table.AbstractTableModel;

/**
 *
 * @author jsanchez
 */
public class ModeloTablaPDCEF extends AbstractTableModel {

    private String[] titulos = {"Factor", "Tipo Volatilidad", "Valor", "No. dias", "No. Observaciones", "Coef. Confianza", "Lambda", "Tipo Diferencia", "Long. Periodo"};
    private Hashtable relacionFactores;
    private Hashtable relacionFactoresPantalla;
    private static Hashtable tasa_tipo;
    private PantallaAsociacionFactorContrato pantalla1 = null;
    Collection origenesdatsoOK = new ArrayList();

    public void salir() throws RemoteException {
        /*for (Object elem : origenesdatsoOK) {
            ((OrigenDeDatos) elem).closePoolConnection();
        }*/
    }

    public PantallaAsociacionFactorContrato getPantalla1() {
        return pantalla1;
    }

    public ModeloTablaPDCEF(PantallaAsociacionFactorContrato pantalla1, Hashtable relacionFactores, PantallaDefinicionCambioEsperadoFactores panel) throws RemoteException, NamingException, ClassNotFoundException, SQLException, ExceptionEnConsulta {
        this.relacionFactores = relacionFactores;
        this.pantalla1 = pantalla1;

        if (tasa_tipo == null) {

            try {
                
                Collection ClibroCuentasProductos = new OrigenDeDatosBean().ejbFindByAll();
                panel.ht.put("IDMODELO", panel.threadModelos.getIdModelo());
                for (Object elem : ClibroCuentasProductos) {
                    if (((OrigenesdatosDTO) elem).getEntidad().trim().equals("TASAS")) {
                        origenesdatsoOK.add(((OrigenesdatosDTO) elem));
                        
                        OrigenDeDatosBean origenDeDatosBean = new OrigenDeDatosBean();
                        origenDeDatosBean.setOrigenesdatosDTO((OrigenesdatosDTO)elem);
                        ArrayList datos = new OrigenDeDatosBean().obtenerDatos(panel.ht);
                        
                        //ArrayList datos = ((OrigenesdatosDTO) elem).obtenerDatos(panel.ht);
                        //ArrayList campos = ((OrigenDeDatos) elem).getArregloCampos();
                        int mapeoNombreTasa = 0;//campos.indexOf("NOMBRE");
                        int mapeoTipoTasa = 1;//campos.indexOf("TIPO");
                        Iterator i = datos.iterator();
                        tasa_tipo = new Hashtable();
                        while (i.hasNext()) {
                            Object[] registro = (Object[]) i.next();
                            String tasa = registro[mapeoNombreTasa].toString().trim();
                            String tipo = registro[mapeoTipoTasa].toString().trim();
                            tasa_tipo.put(tasa, tipo);
                        }
                    }
                }
            } catch (Exception e) {
                throw new ExceptionEnConsulta("Error tratando de Procesar las Tasas.\n" + e);
            }
        }
    }

    public void setRelacionFactores(Hashtable relacion) {
        this.relacionFactores = relacion;
        fireTableDataChanged();
    }

    public void setRelacionFactoresPantalla(Hashtable relacion) {
        this.relacionFactoresPantalla = relacion;
    }

    public Hashtable getRelacionFactores() {
        return relacionFactores;
    }

    @Override
    public String getColumnName(int col) {
        return titulos[col];
    }

    @Override
    public Class getColumnClass(int col) {

        if (col == 2 || col == 5 || col == 6) {
            return Double.class;
        }

        if (col == 3 || col == 4 || col == 8) {
            return Integer.class;
        }

        return String.class;
    }

    public int getColumnCount() {
        return titulos.length;
    }

    public int getRowCount() {
        return relacionFactores.size();
    }

    @Override
    public boolean isCellEditable(int row, int col) {
        try {


            if (col == 0) {
                return false;
            }

            if (col == 1) {
                return true;
            }

            ArrayList factorestemp = new ArrayList(relacionFactores.keySet());
            Collections.sort(factorestemp);
            Object llave = factorestemp.get(row);
            FactorRiesgoPersonal factor = (FactorRiesgoPersonal) relacionFactores.get(llave);

            boolean registrado = factor.getTipoCalculoCambioEsperado() == FactorRiesgoPersonal.CAMBIOESPERADO_FACTORMATRIZ;
            if (registrado) {
                return false;
            }

            byte forma = 0;
            if (!registrado) {
                forma = factor.getDefinidorCalculoCambioEsperado().getFormaCalculoCambioEsperado();
            }

            if (forma == DefinidorCalculoCambioEsperado.FORMA_CALCULOCAMBIOESPERADO_VALORESPECIFICADO) {

                if (col == 2) {
                    return true;
                }
                return false;

            } else if (forma == DefinidorCalculoCambioEsperado.FORMA_CALCULOCAMBIOESPERADO_NORMAL) {

                if (col == 4 || col == 5) {
                    return true;
                }

                if (llave instanceof TasaPK) {

                    if (tasa_tipo.get(llave.toString()).equals(/*Tasa.*/TIPO_CURVA) && col == 3) {
                        return true;
                    }
                }

                return false;

            } else if (forma == DefinidorCalculoCambioEsperado.FORMA_CALCULOCAMBIOESPERADO_EWMA) {

                if (col == 4 || col == 5 || col == 6 || col == 7 || col == 8) {
                    return true;
                }

                if (llave instanceof TasaPK) {

                    if (tasa_tipo.get(llave.toString()).equals(/*Tasa.*/TIPO_CURVA) && col == 3) {
                        return true;
                    }
                }
                return false;

            } else if (forma == DefinidorCalculoCambioEsperado.FORMA_CALCULOCAMBIOESPERADO_ELIECER || forma == DefinidorCalculoCambioEsperado.FORMA_CALCULOCAMBIOESPERADO_ELIECER_NO_SUMAR_PROMEDIO) {

                if (col == 4 || col == 5 || col == 7 || col == 8) {
                    return true;
                }

                if (llave instanceof TasaPK) {
                    if (tasa_tipo.get(llave.toString()).equals(/*Tasa.*/TIPO_CURVA) && col == 3) {
                        return true;
                    }
                }
                return false;
            } else if (forma == DefinidorCalculoCambioEsperado.FORMA_CALCULOCAMBIOESPERADO_ELIECER_NO_SUMAR_PROMEDIO_MAX_OBSERVACION ) {
                //System.out.println("OJO 1 en isCellEditable");
                if (col == 4 || col == 5 || col == 7 || col == 8) {
                    return true;
                }

                if (llave instanceof TasaPK) {
                    if (tasa_tipo.get(llave.toString()).equals(/*Tasa.*/TIPO_CURVA) && col == 3) {
                        return true;
                    }
                }
                return false;
            } else if(forma == DefinidorCalculoCambioEsperado.FORMA_VALORACION_HISTORICA){
                if (col == 4 || col == 5 || col == 7 || col == 8) {
                    return true;
                }
            } else if(forma == DefinidorCalculoCambioEsperado.FORMA_REGRESION_LINIAL){
                if (col == 4 ||  col == 7 || col == 8) {
                    return true;
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return false;
    }

    public void setValueAt(Object value, int row, int col) {

        ArrayList factorestemp = new ArrayList(relacionFactores.keySet());
        Collections.sort(factorestemp);
        Object llave = factorestemp.get(row);
        FactorRiesgoPersonal factor = (FactorRiesgoPersonal) relacionFactores.get(llave);
        if (value instanceof String) {
            if (!(value.toString()).equals("REGISTRADO") && !(value.toString()).equals("ESPECIFICADO")) {
                FactorRiesgoPersonal obj = (FactorRiesgoPersonal) this.pantalla1.getRelacionEspeciesFactores().get(llave);
                boolean salir = false;
                if (obj != null) {
                    if (obj.getTasaPK() != null && obj.getTasaPK().toString().equals("TIPO_FACTORTASA_DESCUENTO")) {
                        salir = true;
                    }
                } else {
                    obj = (FactorRiesgoPersonal) this.pantalla1.getRelacionProductosFactores().get(llave);
                    if (obj != null && obj.getTasaPK() != null && obj.getTasaPK().toString().equals("TIPO_FACTORTASA_DESCUENTO")) {
                        salir = true;
                    }
                }
                if (salir) {
                    JOptionPane.showMessageDialog(this.pantalla1.getFrame(), "Este Producto tiene factor de riesgo 'TASA DE DESCUENTO'\n" +
                            "por lo tanto no se le puede asignar Tipo de volatilidad\n" +
                            "diferente de  REGISTRADO, ESPECIFICADO.", "Mesane", JOptionPane.OK_OPTION);
                    return;
                }
            }
        }

        if (col == 1) {
            if (((String) value).equals("REGISTRADO")) {
                factor.setDefinidorCalculoCambioEsperado(null);
            } else if (((String) value).equals("ESPECIFICADO")) {
                factor.setDefinidorCalculoCambioEsperado(new DefinidorCalculoCambioEsperado(0));
            } else if (((String) value).equals("NORMAL")) {
                try {
                    factor.setDefinidorCalculoCambioEsperado(new DefinidorCalculoCambioEsperado(1, 0));
                } catch (DatoInvalidoExcepcion e) {
                }
            } else if (((String) value).equals("EWMA")) {
                try {
                    factor.setDefinidorCalculoCambioEsperado(new DefinidorCalculoCambioEsperado(0, 1, 0, DefinidorCalculoCambioEsperado.DIF_ARITMETICA, 1));
                } catch (DatoInvalidoExcepcion e) {
                }
            } else if (((String) value).equals("DIFERENCIA") || ((String) value).equals("DIFERENCIA_SIN_PROMEDIO")) {
                try {
                    if (((String) value).equals("DIFERENCIA")) {
                        factor.setDefinidorCalculoCambioEsperado(
                                new DefinidorCalculoCambioEsperado(DefinidorCalculoCambioEsperado.DIF_ARITMETICA, 1, 1, 0, true));
                    } else if (((String) value).equals("DIFERENCIA_SIN_PROMEDIO")) {
                        factor.setDefinidorCalculoCambioEsperado(
                                new DefinidorCalculoCambioEsperado(DefinidorCalculoCambioEsperado.DIF_ARITMETICA, 1, 1, 0, false));
                    }
                } catch (DatoInvalidoExcepcion e) {
                }
            } else if (((String) value).equals("VOLATILIDAD_MAXIMA")) {
                //System.out.println("esta aqui..");
                try {
                    factor.setDefinidorCalculoCambioEsperado(new DefinidorCalculoCambioEsperado(DefinidorCalculoCambioEsperado.DIF_ARITMETICA, 1, 1, 0, null));
                } catch (DatoInvalidoExcepcion e) {
                }
            }else if(((String) value).equals("SIMULACION HISTORICA")){
                try {
                    factor.setDefinidorCalculoCambioEsperado(new DefinidorCalculoCambioEsperado(1, 0, DefinidorCalculoCambioEsperado.DIF_ARITMETICA, 1));

                } catch (DatoInvalidoExcepcion e) {
                }
            }else if(((String) value).equals("REGRESION LINEAL")){
                try {
                    factor.setDefinidorCalculoCambioEsperado(new DefinidorCalculoCambioEsperado(1, DefinidorCalculoCambioEsperado.DIF_ARITMETICA, 1));                
                } catch (DatoInvalidoExcepcion e) {
                }
            }


            //DefinidorCalculoCambioEsperado(int numobservaciones,  double coeficienteconfianza, byte tipodiferencia, int longperiodo)
        } else if (col == 2) {
            factor.getDefinidorCalculoCambioEsperado().setValor(((Double) value).doubleValue());
        } else if (col == 3) {
            factor.getDefinidorCalculoCambioEsperado().setNumdias(((Integer) value).intValue());
        } else if (col == 4) {
            factor.getDefinidorCalculoCambioEsperado().setNumobservaciones(((Integer) value).intValue());
        } else if (col == 5) {
            factor.getDefinidorCalculoCambioEsperado().setCoeficienteconfianza(((Double) value).doubleValue());
        } else if (col == 6) {
            factor.getDefinidorCalculoCambioEsperado().setLambda(((Double) value).doubleValue());
        } else if (col == 7) {
            /*
             * Modificado por Eliecer Cortes
             * 1 de Septiembre 2011
             * Agregar Opcion NO CALCULAR
             */
            if (((String) value).trim().equals("NO CALCULAR")) {
                try {
                    factor.getDefinidorCalculoCambioEsperado().setTipodiferencia(DefinidorCalculoCambioEsperado.NO_CALCULAR_DIF);
                } catch (DatoInvalidoExcepcion e) {
                }
            } else if (((String) value).trim().equals("LOGARITMICA")) {
                //System.out.println("Aqui : "+value);
                try {
                    factor.getDefinidorCalculoCambioEsperado().setTipodiferencia(DefinidorCalculoCambioEsperado.DIF_LOGARITMICA);
                } catch (DatoInvalidoExcepcion e) {
                }
            }

            /*
             * Modificado por Cristhiam Reina
             * 5 de agosto del 2011
             * Modificacionn del 2011
             */
            else if (((String) value).trim().equals("ARITMETICA")){
                //System.out.println("Aqui 2: "+value);
                try {
                    factor.getDefinidorCalculoCambioEsperado().setTipodiferencia(DefinidorCalculoCambioEsperado.DIF_ARITMETICA);
                } catch (DatoInvalidoExcepcion e) {
                }
            }else {
                try {
                    factor.getDefinidorCalculoCambioEsperado().setTipodiferencia(DefinidorCalculoCambioEsperado.DIF_GEOMETRICA);
                } catch (DatoInvalidoExcepcion e) {
                }
            }

        } else if (col == 8) {
            factor.getDefinidorCalculoCambioEsperado().setLongperiodo(((Integer) value).intValue());
        }
        fireTableDataChanged();
        //System.out.println("set in Model : "+getValueAt(row, col) + " = "+value);
    }

    public Object getValueAt(int row, int col) {

        if(row == 0 && col == 1){
            int i = 0;
        }
        ArrayList factorestemp = new ArrayList(relacionFactores.keySet());
        Collections.sort(factorestemp);
        Object llave = factorestemp.get(row);

        if (col == 0) {
            String llave1 = null;
            String tmp = null;
            try {
                tmp = llave.toString().trim();
                llave1 = (String) relacionFactoresPantalla.get(tmp);
            } catch (Exception e) {
            }

            if (llave1 != null) {
                return llave1 + " : "+ llave;
            } else{
                return llave;
            }
        }

        FactorRiesgoPersonal factor = (FactorRiesgoPersonal) relacionFactores.get(llave);

        boolean registrado = factor.getTipoCalculoCambioEsperado() == FactorRiesgoPersonal.CAMBIOESPERADO_FACTORMATRIZ;
        byte forma = 0;
        if (!registrado) {
            try {
                forma = factor.getDefinidorCalculoCambioEsperado().getFormaCalculoCambioEsperado();
                //System.out.println("forma : "+forma+", col : "+col);
            } catch (Exception e) {
            }
        }

        //System.out.println("forma : "+forma+","+col);

        if (registrado) {

            if (col == 1) {
                return new String("REGISTRADO");
            } else {
                return null;
            }

        } else if (forma == DefinidorCalculoCambioEsperado.FORMA_CALCULOCAMBIOESPERADO_VALORESPECIFICADO) {

            if (col == 1) {
                return new String("ESPECIFICADO");
            } else if (col == 2) {
                return new Double(factor.getDefinidorCalculoCambioEsperado().getValor());
            } else {
                return null;
            }

        } else if (forma == DefinidorCalculoCambioEsperado.FORMA_CALCULOCAMBIOESPERADO_NORMAL) {


            if (col == 1) {
                return new String("NORMAL");
            } else if (col == 4) {
                return new Integer(factor.getDefinidorCalculoCambioEsperado().getNumobservaciones());
            } else if (col == 5) {
                return new Double(factor.getDefinidorCalculoCambioEsperado().getCoeficienteconfianza());
            } else {

                if (llave instanceof TasaPK) {

                    if (tasa_tipo.get(llave.toString().trim()).equals(TIPO_CURVA) && col == 3) {
                        return new Integer(factor.getDefinidorCalculoCambioEsperado().getNumdias());
                    }

                }

                return null;
            }

        } else if (forma == DefinidorCalculoCambioEsperado.FORMA_CALCULOCAMBIOESPERADO_EWMA) {

            if (col == 1) {
                return new String("EWMA");
            } else if (col == 4) {
                return new Integer(factor.getDefinidorCalculoCambioEsperado().getNumobservaciones());
            } else if (col == 5) {
                return new Double(factor.getDefinidorCalculoCambioEsperado().getCoeficienteconfianza());
            } else if (col == 6) {
                return new Double(factor.getDefinidorCalculoCambioEsperado().getLambda());
            }


            /*
             * Modificacion Por Cristhiam Reina
             * 1 de Septiembre del 2011
             * Modificacion del if col 7, col 8
             */

            else if (col == 7) {

                if (factor.getDefinidorCalculoCambioEsperado().getTipodiferencia() == DefinidorCalculoCambioEsperado.NO_CALCULAR_DIF) {
                    return new String("NO CALCULAR");
                }
                else if (factor.getDefinidorCalculoCambioEsperado().getTipodiferencia() == DefinidorCalculoCambioEsperado.DIF_ARITMETICA) {
                    return new String("ARITMETICA");
                }
                else if (factor.getDefinidorCalculoCambioEsperado().getTipodiferencia() == DefinidorCalculoCambioEsperado.DIF_LOGARITMICA) {
                    return new String("LOGARITMICA");
                }else{
                    return new String("GEOMETRICA");
                }

            } else if (col == 8) {
                return new Integer(factor.getDefinidorCalculoCambioEsperado().getLongperiodo());
            } else {
                if (llave instanceof TasaPK) {

                    if (tasa_tipo.get(llave.toString().trim()).equals(/*Tasa.*/TIPO_CURVA) && col == 3) {
                        return new Integer(factor.getDefinidorCalculoCambioEsperado().getNumdias());
                    }
                }
                return null;
            }
        } else if (forma == DefinidorCalculoCambioEsperado.FORMA_CALCULOCAMBIOESPERADO_ELIECER || forma == DefinidorCalculoCambioEsperado.FORMA_CALCULOCAMBIOESPERADO_ELIECER_NO_SUMAR_PROMEDIO) {

            if (col == 1) {
                if (forma == DefinidorCalculoCambioEsperado.FORMA_CALCULOCAMBIOESPERADO_ELIECER) {
                    return new String("DIFERENCIA");
                } else {
                    return new String("DIFERENCIA_SIN_PROMEDIO");
                }
            } else if (col == 4) {
                return new Integer(factor.getDefinidorCalculoCambioEsperado().getNumobservaciones());
            } else if (col == 5) {
                return new Double(factor.getDefinidorCalculoCambioEsperado().getCoeficienteconfianza());
            } else if (col == 7) {

                if (factor.getDefinidorCalculoCambioEsperado().getTipodiferencia() == DefinidorCalculoCambioEsperado.NO_CALCULAR_DIF) {
                    return new String("NO CALCULAR");
                }
                else if (factor.getDefinidorCalculoCambioEsperado().getTipodiferencia() == DefinidorCalculoCambioEsperado.DIF_ARITMETICA) {
                    return new String("ARITMETICA");
                }

                /*
                 * Modificacion Por Cristhiam Reina
                 * 5 de Marzo del 2011
                 * Modificacion del if
                 */
                
                else if (factor.getDefinidorCalculoCambioEsperado().getTipodiferencia() == DefinidorCalculoCambioEsperado.DIF_LOGARITMICA) {
                    return new String("LOGARITMICA");
                }else{
                    return new String("GEOMETRICA");
                }

            } else if (col == 8) {
                return new Integer(factor.getDefinidorCalculoCambioEsperado().getLongperiodo());
            } else {

                if (llave instanceof TasaPK) {
                    try {
                        if (tasa_tipo.get(llave.toString().trim()).equals(/*Tasa.*/TIPO_CURVA) && col == 3) {
                            return new Integer(factor.getDefinidorCalculoCambioEsperado().getNumdias());
                        }
                    } catch (Exception e) {
                    //System.out.println("Verificar la Tasa :"+llave);
                    }
                }

                return null;
            }

        } else if (forma == DefinidorCalculoCambioEsperado.FORMA_CALCULOCAMBIOESPERADO_ELIECER_NO_SUMAR_PROMEDIO_MAX_OBSERVACION) {

            if (col == 1) {
                return new String("VOLATILIDAD_MAXIMA");
            } else if (col == 4) {
                return new Integer(factor.getDefinidorCalculoCambioEsperado().getNumobservaciones());
            } else if (col == 5) {
                return new Double(factor.getDefinidorCalculoCambioEsperado().getCoeficienteconfianza());
            } else if (col == 7) {
                if (factor.getDefinidorCalculoCambioEsperado().getTipodiferencia() == DefinidorCalculoCambioEsperado.NO_CALCULAR_DIF) {
                    return new String("NO CALCULAR");
                }
                else if (factor.getDefinidorCalculoCambioEsperado().getTipodiferencia() == DefinidorCalculoCambioEsperado.DIF_ARITMETICA) {
                    return new String("ARITMETICA");
                }
                /*
                 * Modificado por Cristhiam Reina
                 * 5 marzo 2011
                 * Modificacion del if
                 */
                else if (factor.getDefinidorCalculoCambioEsperado().getTipodiferencia() == DefinidorCalculoCambioEsperado.DIF_LOGARITMICA) {
                    return new String("LOGARITMICA");
                }else{
                    return new String("GEOMETRICA");
                }
            } else if (col == 8) {
                return new Integer(factor.getDefinidorCalculoCambioEsperado().getLongperiodo());
            } else {
                if (llave instanceof TasaPK) {
                    try {
                        if (tasa_tipo.get(llave.toString().trim()).equals(/*Tasa.*/TIPO_CURVA) && col == 3) {
                            return new Integer(factor.getDefinidorCalculoCambioEsperado().getNumdias());
                        }
                    } catch (Exception e) {
                    //System.out.println("Verificar la Tasa :"+llave);
                    }
                }
                return null;
            }
        }else  if (forma == DefinidorCalculoCambioEsperado.FORMA_VALORACION_HISTORICA){

            if(col == 1){
                return new String("SIMULACION HISTORICA");
            }else if(col == 4){
                return new Integer(factor.getDefinidorCalculoCambioEsperado().getNumobservaciones());
            }else if(col == 5){
                return new Double(factor.getDefinidorCalculoCambioEsperado().getCoeficienteconfianza());
            }else if(col == 7){
                if (factor.getDefinidorCalculoCambioEsperado().getTipodiferencia() == DefinidorCalculoCambioEsperado.NO_CALCULAR_DIF) {
                    return new String("NO CALCULAR");
                }
                else if (factor.getDefinidorCalculoCambioEsperado().getTipodiferencia() == DefinidorCalculoCambioEsperado.DIF_ARITMETICA) {
                    return new String("ARITMETICA");
                }
                /*
                 * Modificado Por Cristhiam Reina
                 * 5 de marzo del 2011
                 * Modificacion del if
                 */
                else if (factor.getDefinidorCalculoCambioEsperado().getTipodiferencia() == DefinidorCalculoCambioEsperado.DIF_LOGARITMICA) {
                    return new String("LOGARITMICA");
                }else{
                    return new String("GEOMETRICA");
                }
            }else if(col == 8){
                return new Integer(factor.getDefinidorCalculoCambioEsperado().getLongperiodo());
            }

        }
        
        /*
         * Modificado Por Cristhiam Reina
         * 7 De Febrero del 2012
         * Se agrego el else if para REGRESION_LINEAL
        */
        
        else  if (forma == DefinidorCalculoCambioEsperado.FORMA_REGRESION_LINIAL){

            if(col == 1){
                return new String("REGRESION LINEAL");
            }else if(col == 4){
                return new Integer(factor.getDefinidorCalculoCambioEsperado().getNumobservaciones());
            }else if(col == 7){
                if (factor.getDefinidorCalculoCambioEsperado().getTipodiferencia() == DefinidorCalculoCambioEsperado.NO_CALCULAR_DIF) {
                    return new String("NO CALCULAR");
                }
                else if (factor.getDefinidorCalculoCambioEsperado().getTipodiferencia() == DefinidorCalculoCambioEsperado.DIF_ARITMETICA) {
                    return new String("ARITMETICA");
                }
                else if (factor.getDefinidorCalculoCambioEsperado().getTipodiferencia() == DefinidorCalculoCambioEsperado.DIF_LOGARITMICA) {
                    return new String("LOGARITMICA");
                }else{
                    return new String("GEOMETRICA");
                }
            }else if(col == 8){
                return new Integer(factor.getDefinidorCalculoCambioEsperado().getLongperiodo());
            }

        }
        
        return null;
    }
}